#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#include <linux/kfifo.h>

typedef STRUCT_KFIFO(int, 128) FIFO32;
struct TASK;
typedef struct FIFO32Type {
    FIFO32 fifo;
    struct TASK *task;  // 给fifo加一个唤醒的task
} FIFO32Type;

/* fifo的相关函数实现，由于task在这里定义，所以放后面 */
void fifo32_init(FIFO32Type *fifo, struct TASK *task);

void fifo32_put(FIFO32Type *fifo, int data);

static inline int fifo32_get(FIFO32Type *fifo, int *data) { return kfifo_get(&fifo->fifo, data); }

static inline bool fifo32_is_empty(FIFO32Type *fifo) { return kfifo_is_empty(&fifo->fifo); }

#ifdef __cplusplus
}
#endif
